It is sometimes advantageous to divide a computer system into two or more “partitions” where each partition is a collection of system resources that can operate independently or quasi-independently from the other partition or partitions. For example, “soft” partitioning can be implemented by using software known as a “virtual machine monitor” to create two or more execution environments in a single computer. The computer may include only one microprocessor, in which case the various partitions may be implemented on a time-multiplexed basis. In addition, or alternatively, the computer may have more than one microprocessor, or one or more microprocessor may include two or more processing cores. Memory and/or input/output facilities may be shared by the partitions. One or more of the processors and/or cores may be shared.
In so-called “firm” partitioning there are two or more central processing units, each of which is dedicated to a respective partition. Typically in firm partitioning, all functional resources are separated into the respective partitions and are redundant. However there may be some resources such as buses or power planes that are shared and may produce common failure dependencies. Each partition may have its own portions of RAM (random access memory) within the same dual inline memory module.
Just as data exchange among networked computers is often desirable, so too would it be advantageous to have an efficient manner of exchanging data between partitions within a computer.